package 力扣_滑动窗口.常考;

import java.util.HashMap;
import java.util.Map;

/**
 * @author zx
 * @create 2023-03-06 20:23
 */
public class 水果成篮_904 {
    /**
     * @return 这道题的难点在于：(窗口内最多仅允许有两个不同的数字,即：篮子中最多有两种水果)
     * 自己可以想到的做法
     */
    public int totalFruit(int[] fruits) {
        Map<Integer, Integer> map = new HashMap<>();
        int res = 0;
        int left = 0;
        for (int right = 0; right < fruits.length; right++) {
            if (map.containsKey(fruits[right])) {
                map.put(fruits[right], map.get(fruits[right]) + 1);
            } else {
                map.put(fruits[right], 1);
            }
            while (map.size() > 2) {//不符合条件：水果种类大于2
                map.put(fruits[left], map.get(fruits[left]) - 1);
                if (map.get(fruits[left]) == 0) {
                    map.remove(fruits[left]);
                }
                left++;  // 左边界
            }
            res = Math.max(res, right - left + 1);//更新结果
        }
        return res;
    }
}
